/**
 * 简单的Markdown解析器，专为UniApp优化
 * 支持常见的Markdown语法
 */

export class SimpleMarkdown {
  /**
   * 解析Markdown文本并转换为HTML
   * @param {string} text - 原始Markdown文本
   * @returns {string} - 解析后的HTML
   */
  static parse(text) {
    if (!text || typeof text !== 'string') {
      return text || '';
    }

    let html = text;

    // 转义HTML特殊字符
    html = html.replace(/&/g, '&amp;');
    html = html.replace(/</g, '&lt;');
    html = html.replace(/>/g, '&gt;');

    // 代码块 (```)
    html = html.replace(/```(\w*)\n([\s\S]*?)```/g, (match, lang, code) => {
      return `<div class="code-block"><div class="code-lang">${lang || 'code'}</div><pre><code>${code.trim()}</code></pre></div>`;
    });

    // 行内代码 (`)
    html = html.replace(/`([^`]+)`/g, '<code class="inline-code">$1</code>');

    // 标题 (# ## ###)
    html = html.replace(/^### (.*$)/gm, '<h3 class="md-h3">$1</h3>');
    html = html.replace(/^## (.*$)/gm, '<h2 class="md-h2">$1</h2>');
    html = html.replace(/^# (.*$)/gm, '<h1 class="md-h1">$1</h1>');

    // 粗体 (**)
    html = html.replace(/\*\*(.*?)\*\*/g, '<strong class="md-bold">$1</strong>');

    // 斜体 (*)
    html = html.replace(/\*(.*?)\*/g, '<em class="md-italic">$1</em>');

    // 删除线 (~~)
    html = html.replace(/~~(.*?)~~/g, '<del class="md-strikethrough">$1</del>');

    // 链接 [text](url)
    html = html.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2" class="md-link">$1</a>');

    // 无序列表 (- 或 *)
    html = html.replace(/^[\s]*[-*]\s+(.*$)/gm, '<li class="md-li">$1</li>');
    html = html.replace(/(<li class="md-li">.*<\/li>)/s, '<ul class="md-ul">$1</ul>');

    // 有序列表 (1. 2. 3.)
    html = html.replace(/^[\s]*\d+\.\s+(.*$)/gm, '<li class="md-li-ordered">$1</li>');
    html = html.replace(/(<li class="md-li-ordered">.*<\/li>)/s, '<ol class="md-ol">$1</ol>');

    // 引用 (>)
    html = html.replace(/^>\s+(.*$)/gm, '<blockquote class="md-blockquote">$1</blockquote>');

    // 分割线 (---)
    html = html.replace(/^---+$/gm, '<hr class="md-hr">');

    // 换行处理
    html = html.replace(/\n\n/g, '</p><p class="md-p">');
    html = html.replace(/\n/g, '<br>');

    // 包装段落
    if (html && !html.startsWith('<')) {
      html = '<p class="md-p">' + html + '</p>';
    }

    return html;
  }

  /**
   * 提取纯文本（去除Markdown标记）
   * @param {string} text - Markdown文本
   * @returns {string} - 纯文本
   */
  static toPlainText(text) {
    if (!text) return '';
    
    let plain = text;
    
    // 移除代码块
    plain = plain.replace(/```[\s\S]*?```/g, '');
    
    // 移除行内代码
    plain = plain.replace(/`([^`]+)`/g, '$1');
    
    // 移除标题标记
    plain = plain.replace(/^#{1,6}\s+/gm, '');
    
    // 移除粗体和斜体标记
    plain = plain.replace(/\*\*(.*?)\*\*/g, '$1');
    plain = plain.replace(/\*(.*?)\*/g, '$1');
    
    // 移除删除线
    plain = plain.replace(/~~(.*?)~~/g, '$1');
    
    // 移除链接，保留文本
    plain = plain.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1');
    
    // 移除列表标记
    plain = plain.replace(/^[\s]*[-*]\s+/gm, '');
    plain = plain.replace(/^[\s]*\d+\.\s+/gm, '');
    
    // 移除引用标记
    plain = plain.replace(/^>\s+/gm, '');
    
    // 移除分割线
    plain = plain.replace(/^---+$/gm, '');
    
    return plain.trim();
  }
}

export default SimpleMarkdown;
